package com.literaryfamily.literaryfamily.service.user.security;

import com.literaryfamily.literaryfamily.entity.User;
import com.literaryfamily.literaryfamily.entity.UserToken;
import com.literaryfamily.literaryfamily.enumPackage.TokenType;

public interface TokenService {
	/**
	 * 验证令牌,如果令牌即将过期,会自动延长令牌的有效时间,延迟时间为默认登录时间
	 *
	 * @param token 提供的令牌
	 * @param userId 用户ID
	 * @param type 令牌类型,如果为空则认为令牌类型为默认(临时令牌)
	 * @return 验证成功时返回数据库里面的令牌或者是新的令牌
	 */
	UserToken verifyToken(String token, int userId, TokenType type);

	/**
	 * 验证临时令牌
	 * @param token 提供的令牌
	 * @param userId 用户ID
	 * @return 验证成功时返回数据库里面的令牌或者是新的令牌
	 */
	UserToken verifyToken(String token, int userId);

	/**
	 * 使令牌过期
	 * @param token 需要过期的令牌
	 * @param userId 对应的用户
	 * @param type 令牌类型
	 * @return 过期的令牌
	 */
	UserToken invalidateToken(String token, int userId, TokenType type);

	/**
	 * 使临时令牌过期
	 * @param token 需要过期的令牌
	 * @param userId 对应的用户
	 * @return 过期的令牌
	 */
	UserToken invalidateToken(String token, int userId);

	/**
	 * 创建令牌
	 * @param user 需要创建令牌的用户对象
	 * @param type 令牌类型
	 * @return 创建的令牌
	 */
	UserToken insertToken(User user, TokenType type);

	/**
	 *  更新牢令牌
	 * @param user 需要更新的用户
	 * @param type 类型
	 * @param oldToken 牢令牌验证
	 * @return 更新后的令牌
	 */
	UserToken updateToken(User user, TokenType type, String oldToken);
}